
#TODO 文件读写
'''
常见文件的读写分类
A 普通文本文件：txt py md html doc
B csv文件 -- 需要借助于系统模块CSV
C 二进制文件: 图片，音频 视频，压缩包
D 对象的序列化和反序列化 pickle和json
E Excel文件 需要借助于第三方模块
'''

#? 普通文件的写入
#? 打开文件 open()
'''
open(file,mode,encoding)
file -- 需要打开的文件名称或者文件的路径
mode:打开文件的模式
encoding:文件的编码格式
'''
f1 = open("")


















































































#TODO 读取工作表
#? openpyxl 操作Excel 成为处理Excel复杂问题的首选库
#具体的使用流程

import openpyxl
wb = openpyxl.load_workbook("git-demo\PythonCode\student-score.xlsx")
#* wb =openpyxl.Workbook("git-demo\PythonCode\student-score.xlsx")
#? print(wb)
#? print(wb.sheetnames) 工作表的名字

#? 获取工作表对象
#? 方式一
sheet1 = wb["成绩表"]
print(sheet1)
#? <Worksheet "成绩表">

#? 方式二,Python 高版本不太希望使用这个方式，被废弃
sheet2 = wb.get_sheet_by_name("第3小学")
print(sheet2)
#? <Worksheet "第3小学">

#? 获取指定表的指定行 sheet[行号]，得到的是一个元组
row = sheet1[3]
print(row)
for cell in row:
    print(cell.value) #? 获取单元格的值

#? 获取指定列 ,得到的是一个元组
#& 想要得到部分元素使用切片就行
col = sheet1["C"][2:]
#? print(col)
#? 统计不重复的学校名称 使用集合
school_name = set([cell.value for cell in col])
print(school_name)

#? 获取指定单元格 比如B5
#& sheet["行号列号"]
cell = sheet1["B5"]
print(cell.value)

#& sheet.cell(行号,列号) 参数都是需要int类型
cell2 = sheet1.cell(5,2)
print(cell2.value)

#& 关闭文件
wb.close()
#& 保存文件
wb.save("git-demo\PythonCode\student-score.xlsx")

#TODO  写入工作表
import openpyxl
#! openpyxl.Workbook()表示创建一个空的工作簿对象
wb = openpyxl.Workbook()
#?print(wb)
#?print(wb.sheetnames)

#& 获取当前活跃表
sheet3 = wb.active
print(sheet3)

#&修改表的名称
sheet3.title = "用户信息表"
print(sheet3)
wb.save("excel_test.xlsx")
#? ['Sheet'] 新建的Excel文件会有一个名称为"sheet"的工作表


#& 添加或删除工作表
import openpyxl
wb = openpyxl.Workbook()
print(wb.sheetnames)
#& 新增一张工作表,也就是对应咱们Excel 中最下面的+ 操作,添加在末尾
wb.create_sheet()
print(wb.sheetnames)
#?['Sheet']
#?['Sheet', 'Sheet1']

#&获取当前活动工作表 -- 默认为第一个sheet
current_sheet = wb.active
current_sheet.title ="学生信息表"
print(wb.sheetnames)
#? ['学生信息表', 'Sheet1']

#& 复制表
wb.copy_worksheet(current_sheet)
print(wb.sheetnames)
#? ['学生信息表', 'Sheet1', '学生信息表 Copy']
wb.create_sheet("财务")
print(wb.sheetnames)
#? ['学生信息表', 'Sheet1', '学生信息表 Copy', '财务']

#& 指定位置创建一个新的工作表
wb.create_sheet(index=0,title="销售")
print(wb.sheetnames)
#? ['销售', '学生信息表', 'Sheet1', '学生信息表 Copy', '财务']

#& 删除工作表 -- 这里需要的是工作表的对象,才可以进行删除
wb.remove(wb["Sheet1"])
print(wb.sheetnames)
#? ['销售', '学生信息表', '学生信息表 Copy', '财务
wb.save("excel_two.xlsx")

#TODO 修改和追加单元格
import openpyxl
wb = openpyxl.load_workbook("excel_test.xlsx")
#?print(wb)
#?print(wb.sheetnames)
sheet = wb["用户信息表"] #? 如果只有一个表 wb.active
sheet["A1"] ="姓名"
sheet["B1"] ="年龄"
sheet.cell(1,3,"性别")
data_list = [
    ["张三",12,"男"],
    ["王五",13,"男"],
    ["二丫",11,"女"],
    ["敏敏",10,"女"],
]
for ele in data_list:
    #? sheet.append(list) 添加一行
    sheet.append(ele)
#& 修改工作表一定要注意保存
wb.save("excel_test.xlsx")

#TODO 添加,删除行或列
import openpyxl
wb = openpyxl.load_workbook("excel_test.xlsx")
#?print(wb)
#?print(wb.sheetnames)
sheet = wb["用户信息表"] #? 如果只有一个表 wb.active

#& 插入行和列 第一个参数就是第几行(或者第几列),第二个参数是插入的行数(或者列表)
#?sheet.insert_rows(1)
#?sheet.insert_cols(2,5)

#& 删除行和列
sheet.delete_rows(3,2)
#?sheet.delete_cols(2,5)
#& 修改工作表一定要注意保存
wb.save("excel_test.xlsx")



#TODO  设置单元格样式
import openpyxl
from openpyxl.styles import Alignment, Border, Font, PatternFill, Side

excel_url = "D:\Git-Space\git-demo\PythonCode\student-score.xlsx"
wb = openpyxl.load_workbook(excel_url)
#? print(wb.sheetnames)

sheet1 = wb["第2小学"]
#? print(sheet1)
#? 设置单元格样式

#& 设置字体，先创建字体对象
font = Font(
    size = 45,
    italic = True,
    color="698B69", #! 此处的颜色必须是rgb格式，不能使用单词单词
    bold=True
)
#& 然后给指定单元格对象设置字体
sheet1["A1"].font = font
wb.save(excel_url)


#& 设置单元格的填充
fill = PatternFill(
    fill_type="darkGary",
    start_color="0000FF"
)
